package es.ucm.fdi.healthpred.vista;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTextPane;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import javax.swing.WindowConstants;
import javax.swing.border.Border;

import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.RowSpec;
import com.jgoodies.forms.layout.Sizes;

import es.ucm.fdi.healthpred.controlador.Controlador;
import es.ucm.fdi.healthpred.controlador.utils.ConstantsString;

/**
 * Formulario con el resultado de los distintos pasos de la inferencia.
 * 
 * @since 1.0
 * 
 * @version 1.0
 * 
 * @author &Aacute;lvaro G&oacute;mez Porris
 * @author V&iacute;ctor L&oacute;pez Monte
 * @author Carlos Rodr&iacute;guez Colliga
 * 
 */
public class FormLogDesplegado extends JDialog {

	private static final long serialVersionUID = 1L;
	private static final int ancho = 980;
	private static final int alto = 560;

	private JScrollPane scrollpane = new JScrollPane();
	private JToolBar barraOpciones = new JToolBar();

	/**
	 * @param padre
	 * @param panel
	 * @param boton1
	 * @param boton2
	 */
	public FormLogDesplegado(JDialog padre, JTextPane panel, JButton boton1,
			JButton boton2) {
		super(padre, false);
		// this.panel = panel;
		scrollpane.setViewportView(panel);
		barraOpciones.add(boton1);
		JSeparator separador = new JSeparator();
		separador.setSize(new Dimension(5, 28));
		separador.setPreferredSize(new Dimension(5, 28));
		separador.setMinimumSize(new Dimension(5, 28));
		separador.setMaximumSize(new Dimension(5, 28));
		barraOpciones.add(separador);
		barraOpciones.add(boton2);
		init();
	}

	/**
	 * Evita la conctinuaci&oacute;n de la inferencia y permite guardar los
	 * resultados finales en un archivo de texto plano.
	 */
	public void finalizaInferencia() {
		((JButton) barraOpciones.getComponentAtIndex(0)).setEnabled(false);
		((JButton) barraOpciones.getComponentAtIndex(2)).setEnabled(true);
	}

	/**
	 * @return the barraOpciones
	 */
	public JToolBar getBarraOpciones() {
		return barraOpciones;
	}

	/**
	 * @param barraOpciones
	 *            the barraOpciones to set
	 */
	public void setBarraOpciones(JToolBar barraOpciones) {
		this.barraOpciones = barraOpciones;
	}

	/* PRIVADO */
	private void init() {

		int x = Controlador.vistaSecundaria.getX();
		int y = Controlador.vistaSecundaria.getY();

		setSize(ancho, alto);
		Border borde = BorderFactory
				.createLineBorder(new Color(216, 40, 44), 1);
		((JPanel) getContentPane()).setBorder(borde);
		setResizable(false);
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		setLocation(x + 10, y - 10);
		setTitle(ConstantsString.TITULO_RESULTADO);

		getContentPane().setLayout(
				new FormLayout(new ColumnSpec[] { ColumnSpec
						.decode("965px:grow"), }, new RowSpec[] {
						RowSpec.decode("max(10px;default)"),
						new RowSpec(RowSpec.CENTER, Sizes.bounded(
								Sizes.PREFERRED, Sizes.constant("28px", false),
								Sizes.constant("28px", false)), 0),
						RowSpec.decode("max(10px;default)"),
						new RowSpec(RowSpec.CENTER, Sizes.bounded(
								Sizes.PREFERRED,
								Sizes.constant("478px", false),
								Sizes.constant("478px", false)), 0) }));

		barraOpciones.setFocusable(false);
		barraOpciones.setFloatable(false);
		getContentPane().add(barraOpciones, "1, 2, center, fill");
		getContentPane().add(scrollpane, "1, 4, fill, top");

		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent we) {
				Controlador.habilitaDesplegar();
			}
		});

		// Cierre del JDialog con la tecla ESC
		KeyStroke escape = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false);
		Action escapeAction = new AbstractAction() {

			private static final long serialVersionUID = 1L;

			public void actionPerformed(ActionEvent e) {
				setVisible(false);
				Controlador.habilitaDesplegar();
			}
		};
		getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
				escape, "ESCAPE");
		getRootPane().getActionMap().put("ESCAPE", escapeAction);
	}

}
